home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / assembler / progasm1.lha / SORGENTI / LEZIONE2i.s < prev    next >
Text File  |  1994-10-30  |  3KB  |  81 lines

  1.  
  2. ; Lezione2i.s
  3.  
  4. Inizio:
  5.     lea    $dff000,a0    ; metti $dff000 in a0
  6. Waitmouse:
  7.     move.w    6(a0),$180(a0)    ; metti il valore .w di $dff006 nel color 0
  8.                 ; 6(a0)=$dff000+6, $180(a0)=$dff000+$180
  9.     btst    #6,$bfe001    ; tasto sinistro del mouse premuto?
  10.     bne.s    Waitmouse    ; se no ritorna a waitmouse e ripeti tutto
  11.     rts            ; esci
  12.  
  13.     END
  14.  
  15. In questa variazione del primo listato sono presenti delle distanze di
  16. indirizzamento: in a0 viene messo l'indirizzo $dff000 (in questo caso si
  17. sceglie perche' e' pari e quando si fanno le distanze di indirizzamento
  18. si possono riconoscere a quali indirizzi si fa riferimento: per esempio
  19. il color0, cioe' il $dff180, si puo' raggiungere con $180(a0), ed e'
  20. evidente che si tratta del $dff180. Se per esempio in a0 avessi messo
  21. l'indirizzo $dff013, per indicare il color0 la giusta distanza di
  22. indirizzamento sarebbe stata $16d(a0), infatti $dff013+$16d=$dff180).
  23. Da notare che il registro a0 non viene mai cambiato, rimane sempre
  24. $dff000, e ogni volta il processore calcola a quale indirizzo ci stiamo
  25. riferendo sommando la distanza di indirizzamento all'indirizzo in a0.
  26. In quasi tutti i programmi che usano la grafica l'indirizzo $dff000 viene
  27. messo in qualche registro per farci la distanza di indirizzamento (o OFFSET),
  28. infatti in questo modo si possono raggiungere tutti i registri CUSTOM
  29. (che finiscono a $DFF1fe).
  30. Si puo' indicare un offset al massimo da -32768 a +32767, ossia da -$8000
  31. a $7FFF.
  32.  
  33. NOTA:
  34. fate attenzione alla differenza che c'e' tra il LEA ed il MOVE quando
  35. si usa una distanza di indirizzamento:
  36.  
  37.     MOVE.L    $100(a0),a1
  38.  
  39. Copia la longword CONTENUTA nell'indirizzo che si trova piu' avanti di quello
  40. in a0 di $100 bytes, nel registro a1. QUINDI: "FAI LA SOMMA TRA L'INDIRIZZO
  41. IN A0 E IL NUMERO PRIMA DELLA PARENTESI; IL RISULTATO E' L'INDIRIZZO DA CUI
  42. VERRA' COPIATA LA LONGWORD IN A1".
  43.  
  44. mentre:
  45.  
  46.     LEA    $100(a0),a1
  47.  
  48. Mette in a1 l'indirizzo risultante dalla somma di a0+$100, non il suo contenuto
  49. infatti il comando LEA serve solo per caricare INDIRIZZI, non CONTENUTI.
  50.  
  51. Facciamo un esempio per chiarire: consideriamo gli indirizzi di memoria come
  52. gli indirizzi di una lunga strada assolata con tante villette in fila, ognuna
  53. con un numero civico. Se mettiamo in a0 l'indirizzo 0, ossia l'indirizzo della
  54. prima casa, con l'istruzione MOVE.L $100(a0),a1, non facciamo altro che mettere
  55. in a1 il tappeto e i mobili dell'ingresso della casa n.$100, ossia ne copiamo
  56. il CONTENUTO per la lunghezza di una longword in a1.
  57. Invece con LEA $100(a0),a1 mettiamo in a1 l'indirizzo della casa $100 senza
  58. entrarci. La differenza sta che con il MOVE in a1 abbiamo messo i mobili,
  59. con il lea invece l'indirizzo. Per CONTENUTO intendo cio' che e' negli
  60. indirizzi, infatti in ogni indirizzo (ogni casa) c'e' sempre qualcosa: puo'
  61. essere un numero (quando ci sono i mobili) oppure puo' essere vuoto (quando la
  62. casa e' abbandonata, ma da cui si puo' prendere ZERO ($00) comunque).
  63.  
  64. Per esempio l'istruzione
  65.  
  66.     LEA    $100(a1),a1
  67.  
  68. E' equivalente all'istruzione:
  69.  
  70.     ADD.W    #$100,a1
  71.  
  72. Perche' in a1 viene messo, appunto, l'indirizzo in a1+$100.
  73.  
  74. NOTA: le distanze di indirizzamento le potere scrivere in decimale o in
  75. esadecimale (col simbolo del $) a piacere, e potete anche mettere delle
  76. moltiplicazioni o delle divisioni etc:
  77.  
  78.     lea    $10*3(a1),a2    ; ovvero sara' assemblato LEA $30(a1),a2
  79.                 ; infatti * significa MOLTIPLICA
  80.     
  81.